// 导入Three.js相关模块
import {
  IcosahedronGeometry,   // 二十面体几何体（适合制作复杂形状）
  Mesh,                  // 网格对象（用于组合几何体与材质）
  MeshNormalMaterial,    // 法线材质（调试用，显示表面朝向）
  MeshStandardMaterial,  // PBR标准材质（支持金属/粗糙度等特性）
} from 'three'
import Entity from './Entity' // 基础实体类

// 创建共享几何体（优化性能，所有树实例共用同一个几何体）
const GEOMETRY = new IcosahedronGeometry(0.3) // 基础半径为0.3的二十面体
GEOMETRY.rotateX(Math.random() * Math.PI * 2) // 随机绕X轴旋转（避免重复感）
GEOMETRY.scale(1, 6, 1) // Y轴拉伸6倍，形成细长形状（类似树干）

// 创建共享材质（所有树实例默认使用相同材质）
const MATERIAL = new MeshStandardMaterial({
  flatShading: true,    // 平面着色（增强低多边形风格）
  color: 0xa2d109,     // 默认黄绿色（类似树叶颜色）
})

// 定义树类（继承自基础实体类）
export default class Tree extends Entity {
  constructor(resolution, color) {
    // 创建网格实例（组合几何体与材质）
    const mesh = new Mesh(GEOMETRY, MATERIAL)
    
    // 随机缩放（0.6~1.2倍原始尺寸，制造大小差异）
    mesh.scale.setScalar(0.6 + Math.random() * 0.6)
    
    // 随机Y轴旋转（让树木朝向不同方向）
    mesh.rotation.y = Math.random() * Math.PI * 2

    // 如果指定颜色，覆盖默认材质颜色
    if (color) {
      MATERIAL.color.set(color)
    }

    // 调用父类构造函数（处理坐标转换等）
    super(mesh, resolution)
  }
}